package mynet

import (
	"fmt"
	"github.com/sirupsen/logrus"
	"net"
	"udp_tcp_client/util"
)

var (
	UdpConn *net.UDPConn
)

func UdpServer(port int) {
	addr, err := net.ResolveUDPAddr(util.NETWORK_UDP, fmt.Sprintf("%s:%d", "0.0.0.0", port))
	if err != nil {
		logrus.Panicln("udp端口监听错误1")
		panic(fmt.Errorf("udp端口监听错误1:%v", err))
	}

	util.UdpConn, err = net.ListenUDP(util.NETWORK_UDP, addr)
	if err != nil {
		logrus.Panicln("udp端口监听错误2:", err)
		panic(fmt.Errorf("udp端口监听错误2:%v", err))
	}

	defer util.UdpConn.Close()

	logrus.Infoln("udp端口监听于端口:", port)

	for {
		var buff = make([]byte, util.BuffSize)
		count, addrTo, err := util.UdpConn.ReadFromUDP(buff)
		if err != nil {
			logrus.Panicln("读取udp数据失败,err:", err)
		}

		go func() {
			udpValue := string(buff[:count])
			logrus.Infoln(udpValue, util.NETWORK_UDP, addrTo.IP.String(), addrTo.Port)
		}()
	}
}
